#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
"""
Ficheiro principal que executa todo o programa. 

Autores: O. Mílitão, R. Josué
Data: 03-05-2012
"""
import os
import sys
import csv
import autentication

def log_map(info):
    """
    Metodo que devolve um array com a longitude e altitude.

    @info - array que contem a informacao dos logs
    """
    log_m = []
    for x in info:
        tree_info = [x[11],x[10],x[9]+"<br>"+ x[3]+"<br>"+x[6]]
        if not tree_info in log_m:
            log_m.append(tree_info)
    return log_m
    pass


def connections():
    """
    Metodo que executa opções de comunicações
    """
    ok = True
    while ok:
        os.system("clear")
        print "=================================="
        print "| #1 Listar Conexoes             |"
        print "| #2 Gerar Csv                   |"
        print "| #3 Gerar Grafico               |"
        print "| #4 Voltar                      |"
        print "=================================="
        comando = int(raw_input("Qual a opcao que deseja efetuar?\n"))
        import connect
        if comando == 1:
            connect.printConnections()
        elif comando == 2:
            con = connect.getConnections()
            cfl = csv.writer(open("connections.csv", "wb"))
            for c in con:
                cfl.writerow(c)
            print "Csv criado com sucesso!"
        elif comando == 3:
            print "=================================="
            print "| #0 Protocolo                   |"
            print "| #1 Local e Utilizador          |"
            print "| #2 Porta                       |"
            print "| #3 Nome Conexao                |"
            print "| #4 Protocolo camada superior   |"
            print "| #5 Estado da conexao           |"
            print "=================================="
            num = raw_input("Qual o grafico que quer gerar?(numero): ")
            title = raw_input("Titulo a atribuir ao grafico: ")
            label = raw_input("Legenda do grafico: ")
            import plotgraf
            con = connect.getConnections()
            plotgraf.makeGraf(con, int(num), title, label)
        elif comando == 4:
            ok=False
        else:
            print "A opcao nao foi reconhecida!" 
        raw_input("Click Enter para continuar...")

def logs():
    """
    Metodo que executa opções dos logs
    """
    ok = True
    while ok:
        os.system("clear")
        print "=================================="
        print "| #1 Listar Logs                 |"
        print "| #2 Gerar Mapa                  |"
        print "| #3 Gerar Csv                   |"
        print "| #4 Gerar Grafico               |"
        print "| #5 Voltar                      |"
        print "=================================="
        comando = int(raw_input("Qual a opcao que deseja efetuar?\n"))
        import logs
        if comando == 1:
            logs.printLogs()
        elif comando == 2:
            import pymaps
            l = logs.getLogsLocation()
            info = log_map(l)
            pymaps.createMap(info)
            print "O Mapa foi Criado!"
            pass
        elif comando == 3:
            lo = logs.getLogsLocation()
            logfl = csv.writer(open("logs.csv", "wb"))
            for l in lo:
                logfl.writerow(l)
            print "Csv criado com sucesso!"
        elif comando == 4:
            import plotgraf
            print "=================================="
            print "| #1 Interface entrada           |"
            print "| #2 Interface saida             |"
            print "| #3 Ip origem                   |"
            print "| #4 Ip destino                  |"
            print "| #5 Protocolo                   |"
            print "| #6 Continente                  |"
            print "| #7 Pais                        |"
            print "| #8 Cidade                      |"
            print "=================================="
            num = raw_input("Qual o grafico que quer gerar?(numero): ")
            title = raw_input("Titulo a atribuir ao grafico: ")
            label = raw_input("Legenda do grafico: ")
            lo = logs.getLogsLocation()
            plotgraf.makeGraf(lo, int(num), title, label)
        elif comando == 5:
            ok=False
        else:
            print "A opcao nao foi reconhecida!"
        raw_input("Click Enter para continuar...")
    
if __name__ == "__main__":
    """
    Main da aplicação
    """
    print "Efetue o seu login!"
    ok = True
    while ok:
        user = raw_input("Username: ")
        passw = raw_input("Password: ")
        if autentication.login(user, passw):
            break
        else:
            print "Erro no login, tente novamente!"
        os.system("clear")
    ok = True
    while ok:
        os.system("clear")
        print "========================================="
        print "| Trabalho da disciplina de LPD         |" 
        print "|                                       |"
        print "| Autores: O. Militão, R. Josué         |"
        print "| Data: 04-05-2013                      |"
        print "|                                       |" 
        print "| #1 Portscan                           |"
        print "| #2 Analise de Logs                    |" 
        print "| #3 Conexoes                           |"
        print "| #4 Criar DB users                     |"
        print "| #5 Adicionar user na DB               |"
        print "| #6 Sair                               |"
        print "========================================="
        comando = int(raw_input("Qual a opcao que deseja efetuar?\n"))
        if comando == 1:
            import portscan
            portscan.portscan()
	    raw_input("Click Enter para continuar...")
        elif comando == 2:
            logs()
        elif comando == 3:
            connections()
        elif comando == 4:
            try:
                autentication.database()
            except:
                print "Ocorreu um erro!"
            print "Base de dados criada com sucesso!"
            raw_input("Click Enter para continuar...")

        elif comando == 5:
            print "Indique o nome do user a adicionar!"
            u = raw_input("Username: ")
            p = raw_input("Password: ")
            autentication.user_add(u, p)
            raw_input("Click Enter para continuar...")
        elif comando == 6:
            sys.exit(0)
        else:
            print "A opcao nao foi reconhecida!"
	    raw_input("Click Enter para continuar...")
